package com.finance.util.lang.string;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串工具类
 * 
 * 
 */
public class AsiaStringUtils extends org.apache.commons.lang.StringUtils {
    // 定义script的正则表达式
    private static final String regEx_script = "<script[^>]*?>[\\s\\S]*?<\\/script>";
    // 定义style的正则表达式
    private static final String regEx_style = "<style[^>]*?>[\\s\\S]*?<\\/style>";
    // 定义HTML标签的正则表达式
    private static final String regEx_html = "<[^>]+>";
    // 定义空格回车换行符
    private static final String regEx_space = "\\s*|\t|\r|\n";
    // 只允许数字、字母、汉字、“、”、“/”
    private static final String regEx_NUM_ABC_CHIN = "[^a-zA-Z0-9\u4E00-\u9FA5\\、\\/]";
    // 只允许数字、字母、汉字、“、”、“/”
    private static final String regEx_NUM = "[^0-9]";
    // 特殊字符
    private static final String regEx_special = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~！@#￥%……&*（）——+|{}【】‘；：”“’。，、？]";
    // 网址判断（包含https）
    private static final String regEx_url = "^([hH][tT]{2}[pP]://|[hH][tT]{2}[pP][sS]://)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\\/])+$";

    /**
     * 是否全部为空
     * 
     * @param arr
     * @return
     */
    public static boolean isAllBlank(String... arr) {
        if (arr == null) {
            return true;
        }
        for (String string : arr) {
            if (isNotBlank(string)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 是否全部不为空
     * 
     * @param arr
     * @return
     */
    public static boolean isAllNotBlank(String... arr) {
        if (arr == null) {
            return false;
        }
        for (String string : arr) {
            if (isBlank(string)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 是否包含一个为空
     * 
     * @param arr
     * @return
     */
    public static boolean isOrBlank(String... arr) {
        if (arr == null) {
            return true;
        }
        for (String string : arr) {
            if (isBlank(string)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 是否包含一个不为空
     * 
     * @param arr
     * @return
     */
    public static boolean isOrNotBlank(String... arr) {
        if (arr == null) {
            return false;
        }
        for (String string : arr) {
            if (isNotBlank(string)) {
                return true;
            }
        }
        return false;
    }

    /**
     * Description ：去除字符串中的HTML标签
     * 
     * nyj
     * 
     * @param htmlStr
     * @return
     * @since
     *
     */
    public static String delHTMLTag(String htmlStr) {
        if (htmlStr == null) {
            return "";
        }
        Pattern p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
        Matcher m_script = p_script.matcher(htmlStr);
        htmlStr = m_script.replaceAll(""); // 过滤script标签

        Pattern p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
        Matcher m_style = p_style.matcher(htmlStr);
        htmlStr = m_style.replaceAll(""); // 过滤style标签

        Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
        Matcher m_html = p_html.matcher(htmlStr);
        htmlStr = m_html.replaceAll(""); // 过滤html标签

        Pattern p_space = Pattern.compile(regEx_space, Pattern.CASE_INSENSITIVE);
        Matcher m_space = p_space.matcher(htmlStr);
        htmlStr = m_space.replaceAll(""); // 过滤空格回车标签
        return htmlStr.trim(); // 返回文本字符串
    }

    /**
     * Description ： 获取HTML中的文本信息
     * 
     * nyj
     * 
     * @param htmlStr
     * @return
     * @since
     *
     */
    public static String getTextFromHtml(String htmlStr) {
        htmlStr = delHTMLTag(htmlStr);
        htmlStr = htmlStr.replaceAll("&nbsp;", "");
        htmlStr = htmlStr.substring(0, htmlStr.indexOf("。") + 1);
        return htmlStr;
    }

    /**
     * Description ： 只允许数字、字母、汉字、“、”、“/”
     * 
     * nyj
     * 
     * @param htmlStr
     * @return
     * @since
     *
     */
    public static String saveNumAbcChinese(String htmlStr) {
        if (htmlStr == null) {
            return "";
        }
        Pattern p_space = Pattern.compile(regEx_NUM_ABC_CHIN, Pattern.CASE_INSENSITIVE);
        Matcher m_space = p_space.matcher(htmlStr);
        htmlStr = m_space.replaceAll("");
        return htmlStr.trim(); // 返回文本字符串
    }
    
    /**
     * Description ： 只允许数字
     * 
     * nyj
     * 
     * @param
     * @return
     * @since
     *
     */
    public static String saveNum(String str) {
        if (str == null) {
            return "";
        }
        Pattern p_space = Pattern.compile(regEx_NUM, Pattern.CASE_INSENSITIVE);
        Matcher m_space = p_space.matcher(str);
        str = m_space.replaceAll("");
        return str.trim(); // 返回文本字符串
    }
    
    /**
     * Description ： 过滤所有特殊字符
     * 
     * nyj
     * 
     * @param htmlStr
     * @return
     * @since
     *
     */
    public static String deleteSpecialTag(String htmlStr) {
        if (htmlStr == null) {
            return "";
        }
        Pattern p_space = Pattern.compile(regEx_special, Pattern.CASE_INSENSITIVE);
        Matcher m_space = p_space.matcher(htmlStr);
        htmlStr = m_space.replaceAll("");
        return htmlStr.trim(); // 返回文本字符串
    }

    /**
     * 
     * @param s
     * @return 获得<img>标签中图片URL信息
     */
    public static List<String> getImgSrc(String s) {
        // String regEx_img = "<img.*src\\s*=\\s*(.*?)[^>]*?>";
        List<String> imgStr = new ArrayList<String>();
        Pattern pa = Pattern.compile("<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>", Pattern.DOTALL);
        Matcher ma = pa.matcher(s);
        while (ma.find()) {
            imgStr.add(ma.group());
        }
        List<String> srcStr = new ArrayList<String>();
        for (String string : imgStr) {
            Matcher m = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(string);
            while (m.find()) {
                srcStr.add(m.group());
            }
        }
        List<String> result = new ArrayList<String>();
        for (String string : srcStr) {
            Matcher m = Pattern.compile("http://[([a-z0-9A-Z]|_|.|/|\\-)]+.[(jpg)|(bmp)|(gif)|(png)|(JPG)|(BMP)|(GIF)|(PNG)]").matcher(string);
            while (m.find()) {
                result.add(m.group());
            }
        }
        return result;
    }
    
    /** 
    * @Title: 
    * @Description: 判断传入的URL是否为标准URL，包含https地址判断
    * @param @param url
    * @param @return true 验证通过 ，false不通过
    * @date 2017年1月17日 上午10:47:31
    */
    public static boolean isUrl(String url){
		Pattern pattern = Pattern.compile("^([hH][tT]{2}[pP]://|[hH][tT]{2}[pP][sS]://)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\\/])+$");
		return pattern.matcher(url).matches();
    }
}
